/**
 *  @Package: com.yidu.drug.service.impl
 *  @author: Administrator
 *  @date: 2018年8月31日 下午8:26:58
 */
package com.yidu.drug.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import com.yidu.drug.common.Page;
import com.yidu.drug.common.Tools;
import com.yidu.drug.dao.AuditModelMapper;
import com.yidu.drug.dao.FinancialRecordModelMapper;
import com.yidu.drug.dao.FinancialSheetsModelMapper;
import com.yidu.drug.dao.InventoryModelMapper;
import com.yidu.drug.dao.InventoryRecordModelMapper;
import com.yidu.drug.dao.RepertoryModelMapper;
import com.yidu.drug.dao.WholesaleDetailModelMapper;
import com.yidu.drug.dao.WholesaleModelMapper;
import com.yidu.drug.model.AuditModel;
import com.yidu.drug.model.DrugManagerModel;
import com.yidu.drug.model.FinancialRecordModel;
import com.yidu.drug.model.FinancialSheetsModel;
import com.yidu.drug.model.InventoryModel;
import com.yidu.drug.model.InventoryRecordModel;
import com.yidu.drug.model.RepertoryModel;
import com.yidu.drug.model.WholesaleDetailModel;
import com.yidu.drug.model.WholesaleModel;
import com.yidu.drug.service.AuditService;

/**
 * 类的描述 审核service层接口实现
 * @author 祝浪
 * @date 2018年8月31日
 */
@Service
public class AuditServiceImpl implements AuditService {
	@Resource
	AuditModelMapper auditDao;
	@Resource
	WholesaleModelMapper wholesaleDao;
	@Resource
	WholesaleDetailModelMapper wholesaleDetailDao;
	@Resource
	InventoryModelMapper inventory;
	@Resource
	RepertoryModelMapper repertory;
	@Resource
	InventoryRecordModelMapper inventoryRecord;
	@Resource
	FinancialSheetsModelMapper financialSheets;
	@Resource
	FinancialRecordModelMapper financialRecord;
	@Override
	public int insert(AuditModel record,DrugManagerModel manager) {
		
		//创建一个批发订单对象
		WholesaleModel wholesale=new WholesaleModel();
		//加入id
		wholesale.setPfId(record.getQwId());
		//如果通过
		if(record.getAuditPass().equals("1")){
			//加入状态
			wholesale.setIsva("2");
		}else{
			wholesale.setIsva("0");
		}
		//返回状态
		int row=0;
		//将通过的状态从数字转成文字并进行数据操作
		if(record.getAuditPass().equals("1")){
			record.setAuditPass("通过");
			//根据批发订单Id得到订单详情
			List<WholesaleDetailModel> list=wholesaleDetailDao.findPfId(record.getQwId());
			//根据批发Id得到批发订单
			WholesaleModel wholes=wholesaleDao.selectByPrimaryKey(record.getQwId());
			
			for(WholesaleDetailModel whole:list){
				String repId=repertory.findByFilIdPwId(whole.getPwId(),manager.getFilId());
				
				
				//根据业务Id和分公司ID以及批次号查到库存明细信息
				InventoryModel inven= inventory.findByFilIdPwIdNumbers(whole.getPwId(), manager.getFilId(), whole.getNumbers());
				//如果库存明细数量大于订单数量则减 
				if(inven.getInvNumber()+1>whole.getPfxqNumber()){
					Integer invNumber=inven.getInvNumber()-whole.getPfxqNumber();
					//根据数量pwId和库存Id修改库存明细数据
					inventory.updates(invNumber, whole.getPwId(), whole.getNumbers(), repId);
					//根据Id查询到库存
					RepertoryModel reper=repertory.selectByPrimaryKey(repId);
					//根据计算得到总数量
					reper.setRepNumber(reper.getRepNumber()-whole.getPfxqNumber());
					//修改总数量
					repertory.updateByPrimaryKeySelective(reper);
					//new一个库存记录对象
					InventoryRecordModel irm=new InventoryRecordModel();
					//分公司ID
					irm.setFilId(manager.getFilId());
					//生成库存记录Id
					irm.setIrId(Tools.getRandomUUID());
					//类型
					irm.setIrType("出库");
					//操作人
					irm.setOperator("唐磊");
					//是否有效
					irm.setIsva("有效");
					//批次号
					irm.setNumbers(whole.getNumbers());
					//增加业务Id 订单id
					irm.setPwId(record.getQwId());
					//增加库存记录
					inventoryRecord.insertSelective(irm);
					
					
					//财务数据处理
					//根据分店Id得到财务
					FinancialSheetsModel fsm=financialSheets.selectByFilId(manager.getFilId());
					//财务的金额计算
					fsm.setFsPrice(fsm.getFsPrice().add(wholes.getPfTotalMoney()));
					//修改金额
					financialSheets.updateByPrimaryKeySelective(fsm);
					//new一个财务记录对象
					FinancialRecordModel frm=new FinancialRecordModel();
					//生成id
					frm.setFrId(Tools.getRandomUUID());
					//进出账类型
					frm.setFrName("进账");
					//进账金额
					frm.setFrPrice(wholes.getPfTotalMoney());
					//是否有效
					frm.setIsva("是");
					//增加业务Id 订单id
					frm.setPwId(record.getQwId());
					//财务ID
					frm.setFsId(fsm.getFsId());
					//增加记录
					financialRecord.insertSelective(frm);
					row=1;
				}else{
					//事务回滚
					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
					return -1;
				}
			}
			
		}else{
			record.setAuditPass("不通过");
			row=0;
		}
		//先修改订单状态
		wholesaleDao.updateByPrimaryKeySelective(wholesale);
		//增加审核
		record.setAuditId(Tools.getRandomUUID());
		//增加审核人
		record.setShperson("唐磊");
		//增加审核信息
		auditDao.insertSelective(record);
		return row;
	}
	
	@Override
	public int insertSelective(AuditModel record) {
		
		return auditDao.insertSelective(record);
	}

	/**
	 * 根据分公司ID查询所有审核记录信息
	 * @param record 传入一个审核记录对象
	 * @return 返回一个map集合
	 */
	@Override
	public Map<String, Object> findAll(AuditModel record,DrugManagerModel manager) {
		//创建一个分页对象
		Page page = new Page();
		//给分页对象里面的当前页数属性赋值
		page.setPage(Integer.valueOf(record.getPage()));
		//给分页对象里面的每页显示行数属性赋值
		page.setRows(Integer.valueOf(record.getLimit()));
		//将分页对象赋值到审核记录对象里面
		record.setPages(page);
		//给审核记录对象里面的跟分公司ID属性赋值
		record.setFilId(manager.getFilId());
		//调用Dao里面的查询所有的方法
		List<AuditModel> list = auditDao.findAll(record);
		//调用Dao里面的查询总行数的方法
		Long count = auditDao.findRows(record);
		//创建一个map集合
		Map<String,Object> map = new HashMap<String,Object>();
		//给map集合赋值
		map.put("code", 0);
		map.put("msg", "");
		map.put("count", count);
		map.put("data", list);
		return map;
	}

	/**
	 * 根据药品id查询审核详情
	 */
	@Override
	public List<AuditModel> findQwId(String pwId) {
		List<AuditModel> list=auditDao.findQwId(pwId);
		return list;
	}
	
}